Memory in a computer system may experience single bit correctable errors. If these errors are not corrected in a timely manner, they may become more serious uncorrectable multi-bit errors. Some types of memory failures may be predictable based on data like the number of errors, error frequency, change in error frequency, and other telltale signals. Conventional memory protection techniques may address these predictable memory failures through physical redundancy. For example, additional hardware may be used to reconstruct data in failing memory locations and additional memory chips may be used to store the reconstructed data. These and related techniques like on-line sparing, mirroring, RAIDing, and so on require additional memory and additional hardware support. Furthermore, these techniques tend to be isolated from application and/or operating system level processes.